function myInstanceof(L, R) {
  let O = null
  // 获取R原型
  let N = R.prototype

  // 判断L类型，如果是基本数据类型直接返回false，应用数据类型就获取其原型
  if (typeof L === 'function') {
    O = L.prototype
  } else if (typeof L === 'object' && L !== null) {
    O = L.__proto__
  } else {
    return false
  }

  /* 
    也可以使用这种更简洁的方式获取要判断数据的原型
    if (typeof L !== 'object' || L === null) return false
    O = Object.getPrototypeOf(L)
  */

  while (O) {
    if (O === N) return true
    O = O.__proto__
  }
  return false
}
console.log(myInstanceof([123], Function)) //false
console.log(myInstanceof([123], Array))  //true
console.log(myInstanceof([123], Object))  //true
console.log(myInstanceof(123, Object))  //true
